/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package colloque.helpers;

import colloque.Expose;
import colloque.HibernateUtil;
import colloque.Utilisateur;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Thomas
 */
public class ExposeHelper {

    Session session = null;

    /**
     *
     */
    public ExposeHelper() {
        this.session = HibernateUtil.getSessionFactory().getCurrentSession();
    }

    /**
     * Retourne la liste des exposés à évaluer affectés à un membre
     * 
     * @param utilisateur
     * @return
     */
    public List<Expose> getExposesFromMembre(int utilisateur) {
        List<Expose> tabExpo = new ArrayList<Expose>();
        try {
            Transaction tx = session.beginTransaction();
            Query q = session.createQuery("select distinct e from Expose e, e.utilisateurs u where u.utilisateurid = " + utilisateur + " and u.utilisateurid not in (select ev.utilisateur.utilisateurid from Evalue ev where ev.expose.exposeid = e.exposeid)");
            tabExpo = q.list();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return tabExpo;
    }
    
    /**
     *
     * @param id
     * @return
     */
    public Expose getExposeById(int id){
        Expose expose = new Expose();
        try{
            Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Expose e where e.exposeid = " + id);
            expose = (Expose)q.uniqueResult();
        } catch (Exception e){
            e.printStackTrace();
        }
        return expose;
    }
    
    /**
     * Retourne la liste des exposés qui n'ont pas été affectés ou qui n'ont pas encore été évalués
     * (Ainsi, le président peut réaffecter certains exposés à de nouveaux utilisateurs)
     * 
     * @param utilisateur
     * @return
     */
    public List<Expose> getExposesAevaluer(Utilisateur utilisateur){
        List<Expose> exposes = new ArrayList<Expose>();
        try{
            Transaction tx = session.beginTransaction();
            Query q = session.createQuery("from Expose e where e.exposeetat = 0 and e.colloque in (Select c.colloqueid from Colloque c where c.president = " + utilisateur.getUtilisateurid() + ")");
            exposes = q.list();
        } catch (Exception e){
            e.printStackTrace();
        }
        return exposes;
    }
}
